﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/*
 场景题：图形工厂
 场景描述
     你的应用程序需要能够创建不同类型的图形对象，包括圆形（Circle）、矩形（Rectangle）和正方形（Square）。为了管理这些图形对象的创建过程，你决定使用工厂模式。通过工厂模式，你可以将对象的创建逻辑集中在一个工厂类中，并根据需求动态创建不同类型的图形对象。
     你的目标是创建一个图形工厂类，该类能够根据提供的信息（例如“CIRCLE” / “RECTANGLE” / “SQUARE”）返回相应的图形对象。
 */
namespace CS_BEGINNER_TO_PROFICIENT.DesignPatterns.CreationMode.FactoryMethodPattern
{
    public class GraphicsFactory
    {
        public interface Shape
        {
            void Draw();
        }

        public class Rectangle : Shape
        {
            public void Draw() => Console.WriteLine("Inside Rectangle::draw() method.");
        }

        public class Square : Shape
        {
            public void Draw() => Console.WriteLine("Inside Square::draw() method.");
        }

        public class Circle : Shape
        {
            public void Draw() => Console.WriteLine("Inside Circle::draw() method.");
        }

        public interface CreateShapeFactory
        {
            Shape CreateShape();
        }

        public class RectangleFactory : CreateShapeFactory
        {
            public Shape CreateShape() => new Rectangle();
        }

        public class SquareFactory : CreateShapeFactory
        {
            public Shape CreateShape() => new Square();
        }

        public class CircleFactory : CreateShapeFactory
        {
            public Shape CreateShape() => new Circle();
        }
    }
}
